// Package util
// @Title util[简述该包的主要作用]
// @Description
// @Author  cnHuaShao
// @since v0.0.1
// @Version v1.0.0
// @Date 2024/4/21 21:50
// @Update 2024/4/21 21:50
package util

import (
	"fmt"
	"github.com/oschwald/geoip2-golang"
	"log"
	"net"
)

// GetLocation
// @Description: 获取指定IP的地理位置
// @param ip
// @return string
// @return error
func GetLocation(ip string, sysConfig string) (string, error) {
	dbPath := fmt.Sprintf("%s/%s", sysConfig, "GeoLite2-City.mmdb")
	// 打开GeoIP数据库
	db, err := geoip2.Open(dbPath)
	if err != nil {
		log.Fatalf("无法打开GeoIP数据库: %v", err)
		return "", err
	}
	defer db.Close()

	// 查询IP所对应的记录
	record, err := db.City(net.ParseIP(ip))
	if err != nil {
		log.Println("无法查询到该IP的位置信息")
		return "", err
	}
	addr := ""
	if len(record.Country.Names) > 0 {
		addr = addr + record.Country.Names["zh-CN"] // 国家名称（中文）
	}
	if len(record.Subdivisions) > 0 {
		addr = addr + " " + record.Subdivisions[0].Names["zh-CN"] // 省份或州名称（中文）
	}
	if record.City.GeoNameID > 0 {
		addr = addr + " " + record.City.Names["zh-CN"] // 城市名称（中文）
	}
	return addr, nil
}
